OpenRoads Designer CONNECT Edition SDK Help

Generate all feature definition names used in DGN file for Terrains, Alignments and Profiles

The below code snippet shows generating the feature definitions names used in DGN file category wise for terrains, alignments, and profiles.

//Required References
using System;
using System.Collections.Generic;
using Bentley.CifNET.SDK;
using Bentley.CifNET.GeometryModel.SDK;
using System.Diagnostics;
using Bentley.MstnPlatformNET;

 public void GenerateUsedFeatureDefinitionNames()
        {
            try
            {
                //Get active DGN model
                Bentley.DgnPlatformNET.DgnModelRef dgnModel = Session.Instance.GetActiveDgnModelRef();
                using (ConsensusConnection con = new ConsensusConnection(dgnModel))
                {
                    //Get geometric models
                    IEnumerable<GeometricModel> activeGMs = con.GetAllGeometricModels();

                    //Feature definitions used for Terrains
                    foreach (GeometricModel gm in activeGMs)
                    {
                        Trace.WriteLine("FeatureDefinitions used in Terrains: ");
                        foreach (TerrainSurface terrain in gm.TerrainSurfaces)
                        {
                            if (terrain != null && terrain.FeatureDefinition != null && terrain.FeatureDefinition.Name.Trim() != "")
                            {
                                string fName = terrain.FeatureDefinition.Name.Substring(terrain.FeatureDefinition.Name.LastIndexOf("\\") + 1);
                                Trace.WriteLine(fName);
                            }
                        }
                    }

                    //Feature definitions used for alignments
                    foreach (GeometricModel gm in activeGMs)
                    {
                        Trace.WriteLine("FeatureDefinitions used in Alignments: ");
                        foreach (Alignment alignment in gm.Alignments)
                        {
                            if (alignment != null && alignment.FeatureDefinition != null && alignment.FeatureDefinition.Name.Trim() != "")
                            {
                                string fName = alignment.FeatureDefinition.Name.Substring(alignment.FeatureDefinition.Name.LastIndexOf("\\") + 1);
                                Trace.WriteLine(fName);
                            }
                        }
                    }

                    //Feature definitions used for profiles
                    foreach (GeometricModel gm in activeGMs)
                    {
                        Trace.WriteLine("FeatureDefinitions used in Profiles: ");
                        foreach (Alignment alignment in gm.Alignments)
                        {
                            IEnumerable<Profile> profiles = alignment.Profiles;

                            foreach (Profile profile in profiles)
                            {
                                if (profile != null && profile.FeatureDefinition != null && profile.FeatureDefinition.Name.Trim() != "")
                                {
                                    string fName = profile.FeatureDefinition.Name.Substring(profile.FeatureDefinition.Name.LastIndexOf("\\") + 1);
                                    Trace.WriteLine(fName);

                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
                return;
            }
        }